package com.yuanshen.equip.dto;


import com.yuanshen.equip.enums.EquipType;
import com.yuanshen.equip.enums.PropertyType;

import java.util.ArrayList;
import java.util.List;

/**
 * 圣遗物各部位主词条与副词条的规则
 *
 * @author Administrator
 * @date 2023/2/9 15:02
 */
public class EquipRules {

    /**
     * 主词条有哪些
     *
     * @param equipType 装备类型
     * @return {@link List}<{@link PropertyType}>
     */
    public static List<PropertyType> getMainProperty(EquipType equipType) {
        List<PropertyType> result = new ArrayList<>();
        if (equipType == null) {
            return result;
        }


        // 生之花  主词条唯一：生命值
        if (EquipType.FLOWER.equals(equipType)) {
            result.add(PropertyType.HP);
            return result;
        }

        // 死之羽  主词条唯一：攻击力
        if (EquipType.FEATHER.equals(equipType)) {
            result.add(PropertyType.ATTACK_POWER);
            return result;
        }

        // 时之沙  词条：攻击百分比、防御力百分比、生命值百分比、元素精通、元素充能效率
        if (EquipType.SEND.equals(equipType)) {
            result.add(PropertyType.PERCENTAGE_OF_ATTACK_POWER);
            result.add(PropertyType.PERCENTAGE_OF_DEFENSE);
            result.add(PropertyType.PERCENTAGE_OF_HP);
            result.add(PropertyType.ELEMENT_PROFICIENT);
            result.add(PropertyType.ELEMENT_CHARGE);
            return result;
        }

        // 空之杯  词条：攻击力百分比、防御力百分比、生命值百分比、元素精通、元素充能效率、物理伤害加成、某元素伤害加成
        if (EquipType.GLASS.equals(equipType)) {
            result.add(PropertyType.PERCENTAGE_OF_ATTACK_POWER);
            result.add(PropertyType.PERCENTAGE_OF_DEFENSE);
            result.add(PropertyType.PERCENTAGE_OF_HP);
            result.add(PropertyType.ELEMENT_PROFICIENT);
            result.add(PropertyType.ELEMENT_CHARGE);
            result.add(PropertyType.PHYSICAL_DAMAGE_UP);

            result.add(PropertyType.FIRE_ELEMENT_DAMAGE_UP);
            result.add(PropertyType.GRASS_ELEMENT_DAMAGE_UP);
            result.add(PropertyType.ICE_ELEMENT_DAMAGE_UP);
            result.add(PropertyType.RAY_ELEMENT_DAMAGE_UP);
            result.add(PropertyType.WATER_ELEMENT_DAMAGE_UP);
            result.add(PropertyType.ROCK_ELEMENT_DAMAGE_UP);
            result.add(PropertyType.WIND_ELEMENT_DAMAGE_UP);
            return result;
        }

        // 理之冠 词条：攻击力百分比、防御力百分比、生命值百分比、元素精通、暴击率、暴击伤害、治疗加成
        if (EquipType.HEAD.equals(equipType)) {
            result.add(PropertyType.PERCENTAGE_OF_ATTACK_POWER);
            result.add(PropertyType.PERCENTAGE_OF_DEFENSE);
            result.add(PropertyType.PERCENTAGE_OF_HP);
            result.add(PropertyType.ELEMENT_PROFICIENT);
            result.add(PropertyType.CRITICAL_STRIKE_RATE);
            result.add(PropertyType.CRITICAL_DAMAGE);
            result.add(PropertyType.TREATMENT_UP);
            return result;
        }

        return result;
    }


    /**
     * 副词条有哪些
     *
     * @return {@link List}<{@link PropertyType}>
     */
    public static List<PropertyType> getOtherProperty() {
        // 攻击力、攻击力百分比、防御力、防御力百分比、生命力、生命力百分比
        // 暴击率、暴击伤害、元素精通、元素充能效率
        List<PropertyType> result = new ArrayList<>();
        result.add(PropertyType.ATTACK_POWER);
        result.add(PropertyType.PERCENTAGE_OF_ATTACK_POWER);
        result.add(PropertyType.DEFENSE);
        result.add(PropertyType.PERCENTAGE_OF_DEFENSE);
        result.add(PropertyType.HP);
        result.add(PropertyType.PERCENTAGE_OF_HP);
        result.add(PropertyType.CRITICAL_STRIKE_RATE);
        result.add(PropertyType.CRITICAL_DAMAGE);
        result.add(PropertyType.ELEMENT_PROFICIENT);
        result.add(PropertyType.ELEMENT_CHARGE);
        return result;
    }
}
